package com.ecommerce.product;

public class Product {
    // 公共属性：商品编号、名称、价格、描述（均用String处理描述类信息，符合题目要求）
    private String productId;
    private String productName;
    private double price;
    private String description;

    // 构造方法：初始化所有公共属性
    public Product(String productId, String productName, double price, String description) throws InvalidPriceException {
        this.productId = productId;
        this.productName = productName;
        this.setPrice(price); // 调用setter触发价格验证
        this.description = description;
    }

    // Getter方法：获取属性值
    public String getProductId() {
        return productId;
    }

    public String getProductName() {
        return productName;
    }

    public double getPrice() {
        return price;
    }

    public String getDescription() {
        return description;
    }

    // Setter方法：价格设置时触发异常验证（核心异常处理逻辑）
    public void setPrice(double price) throws InvalidPriceException {
        // 题目要求：设计价格验证的异常处理，此处限定价格范围为0 < price ≤ 100000
        if (price <= 0) {
            throw new InvalidPriceException("商品价格无效：价格不能为负数或零");
        }
        if (price > 100000) {
            throw new InvalidPriceException("商品价格无效：价格超出合理范围（最大100000）");
        }
        this.price = price;
    }

    // 公共方法：展示商品基础信息（返回String类型，便于后续子类重写）
    public String showBasicInfo() {
        return "商品编号：" + productId + "\n" +
                "商品名称：" + productName + "\n" +
                "商品价格：" + price + "元\n" +
                "商品描述：" + description;
    }
}